﻿using System;
using System.Collections.Generic;
using Dogshow.Model.Extensions;
using Dogshow.Model.Validation;
using FluentValidation.Attributes;

namespace Dogshow.Model
{
    [Validator(typeof(PasValidator))]
    public class Pas : Entity
    {
        public Pas()
        {
            Titule = new List<TitulaPsa>();
        }

        public int Id { get; set; }
        private string m_ImePsa;
        public string ImePsa
        {
            get { return m_ImePsa; }
            set
            {
                if (ImePsa != value)
                {
                    m_ImePsa = value.TrimNullAndToUpper();
                    OnPropertyChanged("ImePsa");
                }
            }
        }

        private string m_BrojRodovnika;
        public string BrojRodovnika
        {
            get { return m_BrojRodovnika; }
            set
            {
                if (BrojRodovnika != value)
                {
                    m_BrojRodovnika = value.TrimNullAndToUpper();
                    OnPropertyChanged("BrojRodovnika");
                }
                
            }
        }

        private string m_SlikaPsa;
        public string SlikaPsa
        {
            get { return m_SlikaPsa; }
            set
            {
                if (SlikaPsa != value)
                {
                    m_SlikaPsa = value;
                    OnPropertyChanged("SlikaPsa");
                }
                
            }
        }

        private DateTime? m_Ostenjen;
        public DateTime? Ostenjen
        {
            get { return m_Ostenjen; }
            set
            {
                if (Ostenjen != value)
                {
                    m_Ostenjen = value;
                    OnPropertyChanged("Ostenjen");
                }
                
            }
        }

        public int Pol { get; set; }

        public string BojaDlake { get; set; }

        public string TipDlake { get; set; }

        public int? Visina { get; set; }

        public int? Tezina { get; set; }

        // References
        private int? m_IdRase;
        public int? IdRase
        {
            get { return m_IdRase; }
            set
            {
                if (IdRase != value)
                {
                    m_IdRase = value;
                    OnPropertyChanged("IdRase");
                }
                
            }
        }

        private RasaPsa m_RasaPsa;
        public RasaPsa RasaPsa
        {
            get { return m_RasaPsa; }
            set
            {
                m_RasaPsa = value;
                OnPropertyChanged("RasaPsa");
            }
        }

        public int? IdVlasnika { get; set; }
        private Kinolog m_Vlasnik;
        public Kinolog Vlasnik
        {
            get { return m_Vlasnik; }
            set
            {
                m_Vlasnik = value;
                OnPropertyChanged("Vlasnik");
                IdVlasnika = Vlasnik != null ? Vlasnik.Id : null as int?;
            }
        }

        private int? _idOdgajivaca;
        public int? IdOdgajivaca
        {
            get { return _idOdgajivaca; }
            set
            {
                if (IdOdgajivaca != value)
                {
                    _idOdgajivaca = value;
                    OnPropertyChanged("IdOdgajivaca");
                }
            }
        }

        private Kinolog _odgajivac;
        public Kinolog Odgajivac
        {
            get { return _odgajivac; }
            set
            {
                _odgajivac = value;
                OnPropertyChanged("Odgajivac");
            }
        }

        public int? IdOca { get; set; }
        private Pas _otac;
        public Pas Otac
        {
            get { return _otac; }
            set
            {
                _otac = value;
                IdOca = Otac != null ? Otac.Id : (int?) null;
                OnPropertyChanged("Otac");
            }
        }

        public int? IdMajke { get; set; }
        private Pas _majka;
        public Pas Majka
        {
            get { return _majka; }
            set
            {
                _majka = value;
                IdMajke = Majka != null ? Majka.Id : (int?)null;
                OnPropertyChanged("Majka");
            }
        }

        public ICollection<Slika> GalerijaSlika { get; set; }
        public List<TitulaPsa> Titule { get; set; }
    }
}